package practice.knowledge;
public class MethodParameter {//Parameter--参数

/*对于基本数据类型的参数，方法内对参数的修改不会影响原始变量。
对于引用类型的参数（如数组和StringBuffer），如果在方法内修改其内容，
原始对象的内容会改变，但如果在方法内重新指向新的对象，原始引用不会受到影响*/
    public static void main(String[] args) {
        int a = 6;
        char[] str = new char[] { 'H', 'e', 'l', 'l', 'o' };
        StringBuffer sb = new StringBuffer("TOM");//Buffer--缓冲
        /*与 String 类不同，StringBuffer 类允许对字符串进行修改，而不需要创建新
        的对象。因此 StringBuffer 在需要频繁修改字符串的场合比 String 更加高效 */
        changeAddr(str, sb);

        // 输出str数组和sb的内容
        System.out.println(str); // 输出: Hello
        System.out.println(sb.toString()); // 输出: TOM

        changeValue(a, str, sb);

        // 输出a、str数组和sb的内容
        System.out.println(a);
        System.out.println(str);
        System.out.println(sb.toString());
    }

    private static void changeAddr(char[] c, StringBuffer sb) {
        c = new char[] { 'Y', 'e', 'l', 'l', 'o' };
        sb = new StringBuffer("SawYer");
        // 原始引用不受影响
    }

    private static void changeValue(int a, char[] c, StringBuffer sb) {
        a = 8;
        c[0] = 'Y';
        sb.append(" Sawya"); // 向sb中追加字符串"Sawya"
    }
}
